package controller

//go:generate rpcCodeGen-webapi --sourcePath ./ --outPath ./ --appName workflow --outPkg gitee.com/kinwyb/workflow/agent/http/controller

import (
	"gitee.com/kinwyb/workflow/engine"
	"gitee.com/kinwyb/workflow/public"
	"gitee.com/kinwyb/workflow/storage"
)

// FlowSave 流程保存
// @tag WorkFlow
// @param body engine.Flow flow 数据内容
// @return 是否保存成功
func FlowSave(flow engine.Flow, ctx *public.ContextValue) (string, error) {
	return engine.FlowSave(flow, ctx)
}

// FlowQuery 查询一个流程
// @tag WorkFlow
// @param query string flowID* 流程ID
func FlowQuery(flowID string, ctx *public.ContextValue) (*engine.Flow, error) {
	return engine.FlowQuery(flowID, ctx)
}

// FlowRouteQuery 流程公式查询
// @tag WorkFlow
// @param query string routeID* 流程公式ID
func FlowRouteQuery(routeID string, ctx *public.ContextValue) (*engine.FlowRoute, error) {
	return engine.RouteQuery(routeID)
}

// FlowQueryNodes 查询流程节点列表
// @tag WorkFlow
// @param query string flowID* 流程ID
func FlowQueryNodes(flowID string, ctx *public.ContextValue) ([]engine.Node, error) {
	return engine.FlowQueryNodes(flowID, ctx)
}

// WorkFlowCreate 创建一个工作流
// @tag WorkFlow
// @param query string flowID* 流程ID
// @param query string workFlowCode* 工作流编码
// @param query string workFlowName* 工作流名称
func WorkFlowCreate(flowID string, workFlowCode string, workFlowName string, ctx *public.ContextValue) (string, error) {
	return engine.WorkFlowCreate(flowID, workFlowCode, workFlowName, ctx)
}

// WorkCreate 创建一个工作
// @tag WorkFlow
// @param body engine.WorkCreateReq req 数据内容
func WorkCreate(req engine.WorkCreateReq, ctx *public.ContextValue) (string, error) {
	return engine.WorkCreate(req, ctx)
}

// WorkNodeDo 工作节点执行
// @tag WorkFlow
// @param query string workDetailID* 工作节点ID
// @param query bool isPass* 是否通过
// @param query string memo 备注描述
func WorkNodeDo(workDetailID string, isPass bool, memo string, ctx *public.ContextValue) (string, error) {
	return engine.WorkNodeDo(workDetailID, isPass, memo, ctx)
}

// WorkNodes 查询所有工作节点
// @tag WorkFlow
// @param query string workID* 工作ID
func WorkNodes(workID string, ctx *public.ContextValue) ([]engine.WorkNode, error) {
	return engine.WorkNodes(workID, ctx)
}

// EnableWorkFlow 启用工作流
// @tag WorkFlow
// @param query string workFlowID* 工作流ID
func EnableWorkFlow(workFlowID string, ctx *public.ContextValue) error {
	return engine.EnableWorkFlow(workFlowID, ctx)
}

// DisableWorkFlow 禁用工作流
// @tag WorkFlow
// @param query string workFlowID* 工作流ID
func DisableWorkFlow(workFlowID string, ctx *public.ContextValue) error {
	return engine.DisableWorkFlow(workFlowID, ctx)
}

// FlowNodeQuery 流程节点查询
// @tag WorkFlow
// @param query string nodeID* 工作流ID
func FlowNodeQuery(nodeID string) (storage.Node, error) {
	return engine.FlowNodeQuery(nodeID)
}

// FlowNodeUpdate 流程节点更新
// @tag WorkFlow
// @param body engine.Node req* 工作节点
func FlowNodeUpdate(req engine.Node, ctx *public.ContextValue) error {
	return engine.FlowNodeUpdate(req, ctx)
}

// FlowDel 工作流删除
// @tag WorkFlow
// @param query string flowID* 流程ID
func FlowDel(flowID string, ctx *public.ContextValue) error {
	return engine.FlowDel(flowID, ctx)
}

// WaitDoWorkList 待工作列表
// @tag WorkFlow
// @param query string workFlowCode 工作流编码
// @param query string userID* 用户ID
func WaitDoWorkList(workFlowCode string, userID string, ctx *public.ContextValue) ([]storage.WorkNode, error) {
	return engine.WaitDoWorkList(workFlowCode, userID, ctx)
}

// WorkFlowQuery 工作流查询
// @tag WorkFlow
// @param query string workFlowID 工作流ID
// @param query string workFlowCode 工作流编码
// @param query int useStatus 工作流状态(-1=全部,0=未启用,1=启用)
func WorkFlowQuery(workFlowID string, workFlowCode string, useStatus int, ctx *public.ContextValue) []*storage.WorkFlow {
	return engine.WorkFlowQuery(workFlowID, workFlowCode, useStatus, ctx)
}

// UserGroupList 用户组列表
// @tag WorkFlow
// @return []string 用户组名称列表
func UserGroupList(ctx *public.ContextValue) ([]string, error) {
	return engine.UserGroupList(ctx)
}

// UserGroupUserIDQuery 用户组用户ID列表
// @tag WorkFlow
// @param query string userGroupName* 用户组名称
func UserGroupUserIDQuery(userGroupName string, ctx *public.ContextValue) ([]string, error) {
	return engine.UserGroupUserIDQuery(userGroupName, ctx)
}

// UserGroupAddUserID 用户组绑定用户
// @tag WorkFlow
// @param query string userGroupName* 用户组名称
// @param query string userID* 用户ID
func UserGroupAddUserID(userGroupName string, userID string, ctx *public.ContextValue) error {
	return engine.UserGroupAddUserID(userGroupName, userID, ctx)
}

// UserGroupDelUserID 用户组移除用户
// @tag WorkFlow
// @param query string userGroupName* 用户组名称
// @param query string userID* 用户ID
func UserGroupDelUserID(userGroupName string, userID string, ctx *public.ContextValue) error {
	return engine.UserGroupDelUserID(userGroupName, userID, ctx)
}

// WorkNodeQueryByID 工作节点信息查询
// @tag WorkFlow
// @param query string workDetailID* 工作节点信息查询
func WorkNodeQueryByID(workDetailID string, ctx *public.ContextValue) (*storage.WorkNode, error) {
	return engine.WorkNodeQueryByID(workDetailID, ctx)
}

// WorkQueryByID 工作查询
// @rpcxMethod
// @tag WorkFlow
// @param query string workID* 工作节点信息查询
func WorkQueryByID(workID string, ctx *public.ContextValue) (*storage.Work, error) {
	return engine.WorkQueryByID(workID, ctx)
}
